package com.tsu.mall.admin.service.impl;

import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.tsu.mall.common.VO.LayuiTableVO;
import com.tsu.mall.common.VO.ResultVO;
import com.tsu.mall.admin.entity.Attendant;
import com.tsu.mall.admin.mapper.AttendantMapper;
import com.tsu.mall.admin.service.IAttendantService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.tsu.mall.admin.util.RequestUtil;
import com.tsu.mall.common.util.StringDbutil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.concurrent.TimeUnit;

/**
 * <p>
 *  服务实现类
 * </p>
 *
 * @author tttttt
 * @since 2023-03-17
 */
@Service
public class AttendantServiceImpl extends ServiceImpl<AttendantMapper, Attendant> implements IAttendantService {

    @Autowired
    private RedisTemplate<String,Object> redisTemplate;

    @Override
    public LayuiTableVO doList(Integer page,Integer limit,String keyword) {
        PageHelper.startPage(page,limit);
        List<Attendant> list=baseMapper.doSelectListPage(keyword);
        LayuiTableVO vo = new LayuiTableVO();
        vo.setData(list);
        vo.setCount(new PageInfo<>(list).getTotal());
        return vo;
    }

    @Override
    public ResultVO doSave(Attendant attendant) {
        ResultVO vo=new ResultVO();
        if(attendant.getId()==null){//新增管理员
            if(!StringDbutil.isNoBlank(attendant.getUsername())) {
                vo.setCode(1);
                vo.setMsg("用户名不能为空！");
                return vo;
            }
            List<Attendant> attendants=baseMapper.check(attendant.getUsername());
            if(attendants.size()>0) {
                vo.setCode(1);
                vo.setMsg("用户名已经被使用！");
                return vo;
            }
            attendant.setPassword(StringDbutil.md5(attendant.getPassword()));//密码加密
            baseMapper.insert(attendant);
        }else {//编辑管理员
            attendant.setId(attendant.getId());
            baseMapper.updateById(attendant);
        }
        return vo;
    }

    @Override
    public LayuiTableVO selectById(Integer id) {
        LayuiTableVO vo=new LayuiTableVO();
        Attendant attendant=baseMapper.selectById(id);
        vo.setData(attendant);
        return vo;
    }

    @Override
    public ResultVO deleteById(Integer id) {
        ResultVO vo=new ResultVO();
        baseMapper.deleteById(id);
        vo.setMsg("删除管理员信息成功！");
        return vo;
    }

    @Override
    public Boolean check(String username, String password) {
//        redisTemplate.delete("err"+username);
        Object obj=redisTemplate.opsForValue().get("err"+username);
        if(obj!=null){
            if((int)obj>=5){
                RequestUtil.getSession().setAttribute("msg","密码连续输入错误五次，2小时之后再试！");
            }else {
                RequestUtil.getSession().removeAttribute("msg");
            }
        }
        List<Attendant> list=baseMapper.check(username);
        Boolean b= list.size()>0&& list.get(0).getPassword().equals(password);
        if (b){
            RequestUtil.current(list.get(0));
            redisTemplate.delete("err"+username);
            return true;
        }else{//密码错误
            if(obj!=null){
                //(int)obj+1
                redisTemplate.opsForValue().set("err"+username,(int)obj+1,2, TimeUnit.HOURS);
            }else {
                redisTemplate.opsForValue().set("err"+username,1,2, TimeUnit.HOURS);
            }
        }
        return false;
    }

    @Override
    public LayuiTableVO doChose(Integer choseId,Integer attendantId) {
        LayuiTableVO vo=new LayuiTableVO();
        String AttendantName=RequestUtil.getCurrent().getUsername();
        Integer AttendantId=RequestUtil.getCurrent().getId();
        String AdminName=baseMapper.selectBySuperAdmin();//查询一下当前的超级管理员
        //自定义规则，编辑，删除，新增时接收不同的值
         if(choseId==1){//说明此时点击的是增加/删除按钮
             if (AttendantName==AdminName||AttendantName.equals(AdminName)){
                 vo.setData(new String("1"));//随意设置个对象，前台判断不为空则给按钮放行
                 return vo;
             }
         }else if (choseId==2){//说明此时点的是编辑按钮
             if (AttendantName.equals(AdminName)||AttendantId.equals(attendantId)){
                 vo.setData(new String("1"));//随意设置个对象，前台判断不为空则给按钮放行
                 return vo;
             }
         }
        return vo;
    }

    @Override
    public LayuiTableVO doTrans(String transAttendantName) {
        LayuiTableVO vo=new LayuiTableVO();
        List<Attendant> list=baseMapper.check(transAttendantName);
        if (list.size()>0){
            Integer superId=RequestUtil.getCurrent().getId();
            baseMapper.updateByCurrentSuperId(superId);//当前超级管理员 设置为否
            baseMapper.updateByName(transAttendantName);//转让的管理员  设置为是
            vo.setMsg("转让成功!");
            return vo;
        }else {
            vo.setCode(1);
            vo.setMsg("该用户还不是管理员!");
            return vo;
        }
    }

    @Override
    public LayuiTableVO doUpdatePassword(String oldPassword, String newPassword) {
        LayuiTableVO vo=new LayuiTableVO();
        oldPassword=StringDbutil.md5(oldPassword);//旧密码加密
        String password = RequestUtil.getCurrent().getPassword();
        String username=RequestUtil.getCurrent().getUsername();
        if (!oldPassword.equals(password)) {
            vo.setMsg("旧密码输入错误!");
            return vo;
        }else {
            newPassword=StringDbutil.md5(newPassword);//新密码加密
            baseMapper.doUpdatePassword(newPassword,username);
            vo.setData(new String("1"));
            return vo;
        }
    }

    @Override
    public LayuiTableVO sessionValue() {
        LayuiTableVO vo=new LayuiTableVO();
        Attendant attendant=RequestUtil.getCurrent();
        vo.setData(attendant);
        return vo;
    }


}
